RequestDispatcher হলো Servlet API-র একটি গুরুত্বপূর্ণ ইন্টারফেস, যা একটি Servlet থেকে অন্য Servlet বা JSP-তে রিকোয়েস্ট Forward বা Include করার জন্য ব্যবহৃত হয়। এটি কন্ট্রোলার থেকে ভিউয়ে ডেটা পাঠানোর জন্য একটি আদর্শ পদ্ধতি।
RequestDispatcher এর কাজ
- Forward:
একটি Servlet থেকে অন্য Servlet বা JSP-তে রিকোয়েস্ট সম্পূর্ণভাবে পাঠানো হয়। ক্লায়েন্ট এই স্থানান্তর সম্পর্কে জানে না। - Include:
একটি Servlet বা JSP-কে আরেকটি Servlet বা JSP-এর অংশ হিসেবে অন্তর্ভুক্ত করা হয়। এটি মূল রেসপন্সে অতিরিক্ত কন্টেন্ট যোগ করতে ব্যবহৃত হয়।
RequestDispatcher পদ্ধতি
RequestDispatcher ইন্টারফেসের দুটি প্রধান মেথড রয়েছে:
void forward(ServletRequest request, ServletResponse response)
রিকোয়েস্ট এবং রেসপন্স অন্য Servlet বা JSP-তে Forward করে।void include(ServletRequest request, ServletResponse response)
অন্য Servlet বা JSP-এর আউটপুটকে মূল রেসপন্সে অন্তর্ভুক্ত করে।
RequestDispatcher এর মাধ্যমে Forward করা
উদাহরণ
Servlet থেকে Forward করা
Servlet1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// রিকোয়েস্টের জন্য ডেটা সেট করা
request.setAttribute("message", "Hello from Servlet1");
// রিকোয়েস্ট Forward করা
RequestDispatcher dispatcher = request.getRequestDispatcher("Servlet2");
dispatcher.forward(request, response);
}
}
Servlet2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Forward থেকে প্রাপ্ত ডেটা রিসিভ করা
String message = (String) request.getAttribute("message");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
}
web.xml
<web-app>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>Servlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/Servlet2</url-pattern>
</servlet-mapping>
</web-app>
আউটপুট:
<h1>Hello from Servlet1</h1>
RequestDispatcher এর মাধ্যমে Include করা
উদাহরণ
Servlet থেকে Include করা
Servlet1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Welcome to Servlet1</h1>");
// Servlet2 অন্তর্ভুক্ত করা
RequestDispatcher dispatcher = request.getRequestDispatcher("Servlet2");
dispatcher.include(request, response);
out.println("<h1>Back to Servlet1</h1>");
}
}
Servlet2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<p>This is content from Servlet2</p>");
}
}
আউটপুট:
<h1>Welcome to Servlet1</h1>
<p>This is content from Servlet2</p>
<h1>Back to Servlet1</h1>
Forward এবং Include এর পার্থক্য
| বৈশিষ্ট্য | Forward | Include |
|---|---|---|
| উদ্দেশ্য | সম্পূর্ণ রিকোয়েস্ট অন্য Servlet বা JSP-তে পাঠানো। | মূল রেসপন্সে অন্য Servlet বা JSP যোগ করা। |
| কন্ট্রোল ট্রান্সফার | কন্ট্রোল Forward করা Servlet বা JSP-তে যায়। | কন্ট্রোল মূল Servlet বা JSP-তে থাকে। |
| ক্লায়েন্ট সচেতনতা | ক্লায়েন্ট Forward সম্পর্কে জানে না। | ক্লায়েন্ট Include সম্পর্কে জানে না। |
RequestDispatcher ব্যবহারের সুবিধা
- কোড পুনর্ব্যবহারযোগ্য:
একাধিক Servlet বা JSP থেকে একই লজিক বা ডেটা ব্যবহার করা যায়। - কন্টেন্ট অন্তর্ভুক্তি:
বিভিন্ন সোর্স থেকে কন্টেন্ট একত্রিত করা যায়। - লেয়ারড আর্কিটেকচার:
লজিক এবং প্রেজেন্টেশন আলাদা রাখার জন্য Forward এবং Include ব্যবহৃত হয়।
RequestDispatcher Servlet এবং JSP-এর মধ্যে যোগাযোগ সহজ করে এবং ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরি করার প্রক্রিয়াকে আরও কার্যকর এবং সহজ করে তোলে।
Content added By